import axios from 'axios'
// Vue.prototype.$axios = axios
// axios.defaults.baseURL = process.env.VUE_APP_URL
// 创建一个axios副本(修改了默认一些配制的axios)
import { Toast } from 'vant' // Toast===this.$toast
import router from '@/router'
import store from '@/store'
import { removeLocal, getLocal } from '@/utils/local.js'
const _fetch = axios.create({
  baseURL: process.env.VUE_APP_URL
})

// 请求拦截
_fetch.interceptors.request.use(
  function (config) {
    // 我要求使用token你才传,我不用你别传,传了我就报错
    if (config.needToken) {
      config.headers.authorization = `Bearer ${getLocal('token')}`
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 响应拦截
_fetch.interceptors.response.use(
  function (res) {
    // window.console.log('验证码拦截:', res)
    if (res.data.code === 200) {
      // 200时正常返回
      return res
    } else if (res.config.noError) {
      // 删除token
      removeLocal('token')
      // 终止.then的执行 直接跳转到.catch执行
      return Promise.reject(new Error('不需要处理错误的调用'))
    } else if (res.data.code == 401 || res.data.code == 403) {
      // token异常
      /*
      1:删除token
      2:修改vuex中的isLogin为false
      3:跳转到登陆页
      4:提示一下
      5:中止.then执行
      */
      removeLocal('token')
      store.commit('setLoginState', false)
      router.push('/login')
      Toast.fail(res.data.message)
      return Promise.reject(new Error(res.data.message))
    } else {
      // return undefined
      // this.$toast.fail()
      Toast.fail(res.data.message)
      // 抛出错误，不执行.then.直接跳转到.catch执行，reject(内部值)就是最终.catch返回值
      return Promise.reject(new Error(res.data.message))
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)
export default _fetch
